#include <iostream>
#include <algorithm>
using namespace std;
constexpr int MAXN = 100;
int n, m, k[MAXN], multiple[MAXN * MAXN + 10], counter = 0; // n表示卡片的数目, m表示目标和
bool solve();
bool binary_search(int);
int main() {
    #ifndef ONLINE_JUDGE
    freopen("./input.txt", "r", stdin);
    freopen("./out.txt", "w", stdout);
    #endif
    cin >> n >> m;
    for (int i = 0; i < n; i++)
        cin >> k[i];
    
    for (int i = 0; i < n; i++) 
        for (int j = i; j < n; j++)
            multiple[counter++] = k[i] + k[j];
    sort(multiple, multiple + counter);
    if (solve()) cout << "Yes" << endl;
    else cout << "No" << endl;
    return 0;
}

bool binary_search(int target) {
    int low = 0, high = counter, middle = 0;
    while (low < high) {
        middle = (low + high) / 2;
        if (multiple[middle] < target) low = middle + 1;
        else if (multiple[middle] > target) high = middle;
        else return true;
    }
    return false;
}

bool solve() {
    for (int i = 0; i < counter; i++) {
        int finded = multiple[i];
        if (binary_search(m - finded)) {
            cout << "Puch " << finded << endl;
            return true;
        }
    }
    return false;
}
